<?php

/**
 * Conn [CONEXAO]
 * PADRAO SINGLETON PREVINE QUE TENHA APENAS UMA INSTANCIA DO OBJETO SENDO EXECUTADA NA MEMORIA.
 * PADRAO MAIS AGIL DE EXECUCAO DO CODIGO.
 * PERMITE QUE SEJA USADA APENAS UMA INSTANCIA DA MESMA CLASSE EM TODA A APLICACAO.
 * Classe abstrata de conexao. Padrao SingleTon.
 * Retorna um objeto PDO pelo metodo estatico getConn().
 * @copyright (c) 2015, Romulo B. Bosco 
 */
class Conn {

    private static $Host = HOST;
    private static $User = USER;
    private static $Pass = PASS;
    private static $Dba = DBA;

    
    //SOH VAI EXECUTAR A CONEXAO SE O $Connect ESTIVER IGUAL A NULL(NAO INICIALIZADO).
    //EM UMA PROXIMA CONEXAO VERIFICA SE O $Connect ESTA NULL. SE ESTIVER NULL, NAO RECONECTA. UTILIZA O MESMO OBJETO.
    /** @var PDO */
    private static $Connect = null;

    /**
     * CONECTA COM O BANCO DE DADOS COM O PATTERN SINGLETON.
     * RETORNA UM OBJETO PDO.
     */
    private static function Conectar() {
        try {
            if (self::$Connect == null):
                $dsn = 'mysql:host=' . self::$Host . ';dbname=' . self::$Dba;
                $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];
                self::$Connect = new PDO($dsn, self::$User, self::$Pass, $options);
            endif;
        } catch (PDOException $e) {
            PHPErro($e->getCode(), $e->getMessage(), $e->getFile(), $e->getLine());
            die;
        }
        
        self::$Connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return self::$Connect;
    }

    /**
     * 
     * RETORNA UM OBJETO PDO SINGLETON PATTERN.
     */
    public static function getConn() {
        return self::Conectar();
    }

}
